package com.zlq.cn.util.des.hash;


import java.io.InputStream;


public class HrHash {

    /**
     * 不使用散列算法.
     */
    public static final int NONE = 0;

    /**
     * MD5散列算法.
     */
    public static final int MD5 = 1;

    /**
     * SHA1散列算法.
     */
    public static final int SHA1 = 2;

    /**
     * 获取字符串的散列值.
     *
     * @param type 散列算法
     * @param src  待计算散列值的字符串
     * @return 散列结果的字节数组
     * @throws Exception 框架内部异常.
     */
    public static byte[] getHashByString(int type, String src) throws Exception {
        try {
            switch (type) {
                case MD5:

                    return HrMD5.getHashByString(src);

                case SHA1:

                    return HrSHA1.getHashByString(src);

                default:
                    // $ERROR:MPCM020==指定的散列算法类型未知==请联系客服
                    throw new Exception("MPCM020");
            }
        } catch (Exception e) {
            // $ERROR:MPCM016==计算散列值时入参错误==请联系客服
            throw new Exception("MPCM016");
        }
    }

    /**
     * 获取输入流的散列值.
     *
     * @param type 散列算法
     * @param src  待计算散列值的输入流
     * @return 散列结果的字节数组
     * @throws Exception 框架内部异常.
     */
    public static byte[] getHashByInputStream(int type, InputStream src) throws Exception {
        try {
            switch (type) {
                case MD5:
                    return HrMD5.getHashByInputStream(src);

                case SHA1:
                    return HrSHA1.getHashByInputStream(src);

                default:
                    // $ERROR:MPCM017==指定的散列算法类型未知==请联系客服
                    throw new Exception("MPCM017");
            }
        } catch (Exception e) {
            // $ERROR:MPCM018==计算散列值时入参错误==请联系客服
            throw new Exception( "MPCM018");
        }
    }

    /**
     * 获字节数组的取散列值.
     *
     * @param type 散列算法
     * @param src  待计算散列值的字节数组
     * @return 散列结果的字节数组
     * @throws Exception 框架内部异常.
     */
    public static byte[] getHashByBytes(int type, byte[] src) throws Exception {

        try {
            switch (type) {
                case MD5:
                    return HrMD5.getHashByBytes(src);

                case SHA1:
                    return HrSHA1.getHashByBytes(src);

                default:
                    // $ERROR:MPCM021==指定的散列算法类型未知==请联系客服
                    throw new Exception("MPCM021");
            }
        } catch (Exception e) {
            // $ERROR:MPCM022==计算散列值时入参错误==请联系客服
            throw new Exception("MPCM022");
        }
    }
}
